home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
util2
/
hexdump.lha
/
hexdump
/
hexprint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-18
|
6KB
|
173 lines
/***************************************************************************
*
* Copyright P.J.Ruczynski 1990
* This software is free for redistribution and re-use as long as this
* copyright is included in all source files. This software is supplied
* as is and no responsibilty is taken by the author for any problems
* arising from this code.
*
* File name - hexprint.c
*
* Module name - HEXPRINT
*
* Author - P.J.Ruczynski <pjr@pyra.co.uk>
*
* First Release - 16 Feb 1990
*
* Version number - 1.4
*
* Description - A hexadecimal printing routine, will print the
* given buffer with the hex on the left and the
* ascii on the right.
*
* Revision List
*
* pjr 08.05.89 Added offset numbering. This can be compiled out for
* optimum performance.
*
* pjr 11.05.89 Added compressed output format. This can be compiled
* out for optimum performance.
*
* pjr 02.08.89 Changed the bcopy and bcmp routines to use defines
* defined in hexprint.h and controlled by compilation
* flag 'ATT'. With this defined att routines are used,
* default means bsd routines are used. Note that the
* compression stuff uses BCMP and BCOPY.
*
* pjr 04.08.89 Added output to file capability. This can be compiled
* in by defining the H_FILEIO flag. Note that you also
* have to have a file open with an fd of lfp, although
* this can be changed by changing the decn below.
*
**************************************************************************/
#include <stdio.h>
#include "hexprint.h"
#ifdef H_FILEIO
extern FILE *lfp;
#else
#define lfp stdout
#endif /* H_FILEIO */
#ifdef H_COMPRESS
int hex_compression = FALSE; /* compression is off as a default */
#endif /* H_COMPRESS */
#ifdef H_OFFSETS
int offset_print = FALSE; /* only print offsets on request */
long offset = 0L; /* default start offset for printing */
#endif /* H_OFFSET */
/*
* hexprint
*
* routine to print a buffer out in hex form with ascii form on
* the right hand side
*/
/**************************************************************************/
void hexprint(buf, buflen)
/**************************************************************************/
char *buf; /* ptr to data part of msg req, protocol format, to print */
int buflen;
{
int i,j;
char string[H_SLEN];
#ifdef H_COMPRESS
int done_compression = FALSE; /* have we done any compression ? */
char o_string[H_SLEN]; /* string prior to the current one */
#endif /* H_COMPRESS */
#ifdef H_OFFSETS
long o;
if (offset_print)
{
o = offset;
fprintf(lfp,"%5x ",o);
}
#endif /* H_OFFSETS */
for (i=0; i<buflen; i++) {
string[i%H_SLEN] = *buf++;
if (i%H_SLEN == (H_SLEN-1)) {
#ifdef H_OFFSETS
o += H_SLEN;
#endif /* H_OFFSETS */
#ifdef H_COMPRESS
if (hex_compression)
if (i == (H_SLEN-1)) /* first time around ? */
BCOPY(string, o_string, H_SLEN);
else
{
if (BCMP(o_string, string, H_SLEN) == 0)
{
fprintf(lfp,"* ");
done_compression = TRUE;
BCOPY(string, o_string, H_SLEN);
continue;
}
else if (done_compression)
{
fprintf(lfp,"\n");
#ifdef H_OFFSETS
if (offset_print)
fprintf(lfp, "%5x ",o - H_SLEN);
#endif /* H_OFFSETS */
done_compression = FALSE;
}
BCOPY(string, o_string, H_SLEN);
}
#endif /* H_COMPRESS */
for (j=0; j<H_SLEN; j++)
fprintf(lfp, "%2x ",(unsigned char)string[j]);
for (j=0; j<H_SLEN; j++)
if (string[j] >= 0x20 && string[j] <= 0x7e)
fprintf(lfp, "%c",string[j]);
else
fprintf(lfp, ".");
fprintf(lfp, "\n");
#ifdef H_OFFSETS
if ((i != (buflen -1)) && offset_print)
fprintf(lfp, "%5x ",o);
#endif /* H_OFFSETS */
} else
if ((i%H_SLEN < (H_SLEN-1)) && (i == buflen-1)) {
#ifdef H_COMPRESS
if (done_compression)
{
fprintf(lfp, "\n");
#ifdef H_OFFSETS
if (offset_print)
fprintf(lfp, "%5x ",o);
#endif /* H_OFFSETS */
done_compression = FALSE;
}
BCOPY(string, o_string, H_SLEN);
#endif /* H_COMPRESS */
for (j=0; j<=(i%H_SLEN); j++)
fprintf(lfp, "%2x ",(unsigned char)string[j]);
for (j=0; j<((H_SLEN-1)-(i%H_SLEN)); j++)
fprintf(lfp, " ");
for (j=0; j<=(i%H_SLEN); j++)
if (string[j] >= 0x20 &&
string[j] <= 0x7e)
fprintf(lfp, "%c",string[j]);
else
fprintf(lfp, ".");
fprintf(lfp, "\n");
}
} /* end of for */
#ifdef H_COMPRESS
if (done_compression)
fprintf(lfp, "\n");
#endif /* H_COMPRESS */
} /* end of hexprint */